from django.http import JsonResponse, HttpResponse
from django.shortcuts import render, redirect
from django.urls import reverse
from django.views import View

from web import models
from web.forms.project import ProjectModelForm


class ProjectList(View):
    def get(self,request):
        """查看项目列表"""
        """
        展示项目：
        1、从数据库中获取两部分数据：我创建的项目，我参与的项目
        2、拿到三个列表，一个是前面两个列表，还有一个是前面两个已星标的集合组成的列表
        """
        # 三个列表表示上面说的三个列表
        project_dict = {'star': [], 'my': [], 'join': []}
        # 查到所有我(当前用户)创建的项目
        my_project_list = models.Project.objects.filter(creator=request.tracer.user)
        for row in my_project_list:
            if row.star:
                project_dict['star'].append({"value": row, 'type': 'my'})
            else:
                project_dict['my'].append(row)
        # 查到所有我加入的项目
        join_project_list = models.ProjectUser.objects.filter(user=request.tracer.user)
        for item in join_project_list:
            if item.star:
                # 构造一下，这样就好取消星标
                project_dict['star'].append({"value": item.project, 'type': 'join'})
            else:
                project_dict['join'].append(item.project)


        form = ProjectModelForm(request)
        return render(request,'project_list.html',{'form':form,'project_dict':project_dict})

    def post(self,request):
        """通过ajax添加项目"""
        form = ProjectModelForm(request,request.POST)
        if form.is_valid():
            """用户只提交了三个信息,项目表有四个必须字段，其余都是有默认值的，还差一个creator字段，我们要添加上"""

            form.instance.creator = request.tracer.user
            # 创建项目进库
            form.save()
            return JsonResponse({'status': True})
        return JsonResponse({'status':False,'error':form.errors})


def project_star(request,*args,**kwargs):
    """星标项目操作"""

    # 先拿url中传过来的项目id
    project_id = kwargs.get("project_id")

    if kwargs.get('project_type') == 'my':
        # 更新（必须加creator），不然你都能改别人的了
        models.Project.objects.filter(id=project_id,creator=request.tracer.user).update(star=True)
        ##############################最好用ajax请求
        return redirect(reverse('project_list'))

    if kwargs.get('project_type') == 'join':
        # 同理，这里也要加是修改那个用户的，都是为了防爬虫
        models.Project.objects.filter(project_id=project_id,creator=request.tracer.user).update(star=True)
        ##############################最好用ajax请求
        return redirect(reverse('project_list'))

    return HttpResponse('传参错误，你是爬虫还是猪儿虫？')



def project_unstar(request,*args,**kwargs):
    """取消星标项目操作"""

    # 先拿url中传过来的项目id
    project_id = kwargs.get("project_id")

    if kwargs.get('project_type') == 'my':
        # 更新（必须加creator），不然你都能改别人的了
        models.Project.objects.filter(id=project_id,creator=request.tracer.user).update(star=False)
        ##############################最好用ajax请求
        return redirect(reverse('project_list'))

    if kwargs.get('project_type') == 'join':
        # 同理，这里也要加是修改那个用户的，都是为了防爬虫
        models.Project.objects.filter(project_id=project_id,creator=request.tracer.user).update(star=False)
        ##############################最好用ajax请求
        return redirect(reverse('project_list'))

    return HttpResponse('传参错误，你是爬虫还是猪儿虫？')